﻿using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Text;

namespace UCS.ArtificialInteligence.CitiesProblem.Model
{
    public static class Earth
    {
        #region Attributes and Properties

        private static Country _brazil;
        public static Country Brazil
        {
            get { return _brazil; }
        }

        #endregion

        #region Public Methods

        public static void CreateBrazil()
        {
            _brazil = new Country("Brasil");

            var rs = new State("Rio Grande do Sul");
            var sc = new State("Santa Catarina");

            var caxiasDoSul = new City("Caxias do Sul");
            var farroupilha = new City("Farroupilha");
            var novoHamburgo = new City("Novo Hamburgo");
            var vacaria = new City("Vacaria");
            var novaPetropolis = new City("Nova Petrópolis");
            var sapucaiaDoSul = new City("Sapucaia do Sul");
            var lages = new City("Lages");
            var bomJesus = new City("Bom Jesus");
            var taquara = new City("Taquara");
            var santoAntonioDaPatrulha = new City("Santo Antônio da Patrulha");
            var portoAlegre = new City("Porto Alegre");
            var timbeDoSul = new City("Timbé do Sul");
            var tubarao = new City("Tubarão");
            var sombrio = new City("Sombrio");
            var torres = new City("Torres");
            var capaoDaCanoa = new City("Capão da Canoa");
            var osorio = new City("Osório");
            var palhoca = new City("Palhoça");
            var florianopolis = new City("Florianópolis");

            caxiasDoSul.AddBorderTo(farroupilha, 24);
            caxiasDoSul.AddBorderTo(novaPetropolis, 45);
            caxiasDoSul.AddBorderTo(taquara, 82);
            caxiasDoSul.AddBorderTo(bomJesus, 140);
            caxiasDoSul.AddBorderTo(vacaria, 84);
            farroupilha.AddBorderTo(novoHamburgo, 97);
            novoHamburgo.AddBorderTo(sapucaiaDoSul, 14);
            vacaria.AddBorderTo(lages, 22);
            novaPetropolis.AddBorderTo(sapucaiaDoSul, 56);
            sapucaiaDoSul.AddBorderTo(portoAlegre, 23);
            lages.AddBorderTo(palhoca, 256);
            bomJesus.AddBorderTo(timbeDoSul, 96);
            taquara.AddBorderTo(santoAntonioDaPatrulha, 52);
            santoAntonioDaPatrulha.AddBorderTo(osorio, 56);
            portoAlegre.AddBorderTo(osorio, 94);
            timbeDoSul.AddBorderTo(tubarao, 129);
            tubarao.AddBorderTo(palhoca, 136);
            sombrio.AddBorderTo(tubarao, 69);
            torres.AddBorderTo(sombrio, 80);
            capaoDaCanoa.AddBorderTo(torres, 31);
            osorio.AddBorderTo(capaoDaCanoa, 29);
            palhoca.AddBorderTo(florianopolis, 45);

            rs.Cities.Add(caxiasDoSul);
            rs.Cities.Add(farroupilha);
            rs.Cities.Add(novoHamburgo);
            rs.Cities.Add(vacaria);
            rs.Cities.Add(novaPetropolis);
            rs.Cities.Add(sapucaiaDoSul);
            rs.Cities.Add(lages);
            rs.Cities.Add(bomJesus);
            rs.Cities.Add(taquara);
            rs.Cities.Add(santoAntonioDaPatrulha);
            rs.Cities.Add(portoAlegre);
            rs.Cities.Add(capaoDaCanoa);
            rs.Cities.Add(osorio);
            rs.Cities.Add(torres);

            sc.Cities.Add(tubarao);
            sc.Cities.Add(sombrio);
            sc.Cities.Add(timbeDoSul);
            sc.Cities.Add(palhoca);
            sc.Cities.Add(florianopolis);

            _brazil.States.Add(rs);
            _brazil.States.Add(sc);
        }

        #endregion
    }
}
